home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / SNIP0492.ARJ / FOSSIL.ASM < prev    next >
Assembly Source File  |  1991-10-03  |  4KB  |  162 lines

  1. ;  Uses the Zortech assembler macros; written for small model.  If you
  2. ;  need to assemble without the macros, the beg/end data/code should be
  3. ;  obvious, and I think you can ignore the ES stuff.  I don't remember
  4. ;  exactly what that's for now...  Oh, an P is the offset (with a normal
  5. ;  stack frame) of the first argument, of course.
  6.  
  7. include macros.asm
  8.  
  9. begdata
  10.     public fossilMaxFunc, fossilRevision
  11.     fossilMaxFunc dw 0
  12.     fossilRevision dw 0
  13. enddata
  14.  
  15. begcode
  16.  
  17. ;   int pascal port_open(int port)
  18. ;
  19.     public PORT_OPEN
  20.     PORT_OPEN proc
  21.         push bp
  22.         mov bp, sp
  23.         mov ah, 4                   ;fossil function 4
  24.         mov dx, P[bp]               ;port argument
  25.         xor bx, bx                  ;bx MUST NOT be 0x4f50!
  26.         int 014h                    ;call the fossil
  27.         cmp ax, 01954h              ;if call succeeded
  28.         jne open_5
  29.         xor ah, ah
  30.         mov al, bl
  31.         mov fossilMaxFunc, ax       ;  store fossil info in globals
  32.         mov al, bh
  33.         mov fossilRevision, ax
  34.         xor al, al                  ;  return 0
  35.         jmp short open_9
  36. open_5:                             ;else
  37.         mov ax, -1                  ;  return -1
  38. open_9:
  39.         pop bp
  40.         ret 2
  41.     PORT_OPEN endp
  42.  
  43.  
  44. ;   int pascal port_close(int port)
  45. ;
  46.     public PORT_CLOSE
  47.     PORT_CLOSE proc
  48.         push bp
  49.         mov bp, sp
  50.         mov ah, 5                   ;fossil function 5
  51.         mov dx, P[bp]               ;load port argument
  52.         int 014h                    ;call fossil
  53.         xor ax, ax                  ;always returns 0
  54.         pop bp
  55.         ret 2
  56.     PORT_CLOSE endp
  57.  
  58.  
  59. ;   int port_status(int port)
  60. ;
  61.     public PORT_STATUS
  62.     PORT_STATUS proc
  63.         push bp
  64.         mov bp, sp
  65.         mov ah, 3                   ;fossil function 3
  66.         mov dx, P[bp]               ;port argument
  67.         int 014h                    ;call the fossil
  68.                                     ;return value is in ax
  69.         pop bp
  70.         ret 2
  71.     PORT_STATUS endp
  72.  
  73.  
  74. ;   void pascal port_setBaud(int port, int baudCode)
  75. ;
  76.     public PORT_SETBAUD
  77.     PORT_SETBAUD proc
  78.         xor ah, ah                  ;fossil function 0
  79. two_args:
  80.         push bp
  81.         mov bp, sp
  82.         mov dx, P+2[bp]             ;load port argument
  83.         mov al, P[bp]               ;load LSByte of second argument
  84.         int 014h                    ;call fossil
  85.                                     ;return value in ax or none
  86.         pop bp
  87.         ret 4
  88.     PORT_SETBAUD endp
  89.  
  90.  
  91. ;   void pascal port_flow(int port, int mode)
  92. ;
  93.     public PORT_FLOW
  94.     PORT_FLOW proc
  95.         mov ah, 15                  ;fossil function 15
  96.         jmp short two_args
  97.     PORT_FLOW endp
  98.  
  99.  
  100. ;   void port_dtr(int port, int enable)
  101. ;
  102.     public PORT_DTR
  103.     PORT_DTR proc
  104.         push bp
  105.         mov bp, sp
  106.         mov ah, 6                   ;fossil function 6
  107.         mov dx, P+2[bp]             ;load port argument
  108.         mov cx, P[bp]
  109.         or cx, cx
  110.         jne dtr_5                   ;pass enable ? 1 : 0 to fossil
  111.         xor al, al
  112.         jmp short dtr_9
  113. dtr_5:
  114.         mov al, 1
  115. dtr_9:
  116.         int 014h                    ;call the fossil
  117.         pop bp
  118.         ret 4
  119.     PORT_DTR endp
  120.  
  121.  
  122. ;   int pascal port_read(int port, char *buf, int n)
  123. ;
  124.     public PORT_READ
  125.     PORT_READ proc
  126.         mov ah, 24                  ;fossil function 24
  127. read_write:
  128.         push bp
  129.         mov bp, sp
  130.         push di
  131.         pushES
  132.         mov dx, P+2+SIZEPTR[bp]     ;load port argument
  133.         if SPTR
  134.           setESeqDS
  135.           mov di, P+2[bp]
  136.         else
  137.           les di, P+2[bp]
  138.         endif                       ;load buffer address
  139.         mov cx, P[bp]               ;load buffer size
  140.         int 014h                    ;call fossil
  141.                                     ;return is already in ax
  142.         ; restore regs?
  143.         popES
  144.         pop di
  145.         pop bp
  146.         ret 4 + SIZEPTR
  147.     PORT_READ endp
  148.  
  149.  
  150. ;   int pascal port_write(int port, char *buf, int n)
  151. ;
  152.     public PORT_WRITE
  153.     PORT_WRITE proc
  154.         mov ah, 25                  ;fossil function 25
  155.         jmp short read_write        ;rest of code is shared w/read
  156.     PORT_WRITE endp
  157.  
  158. endcode
  159.  
  160.  
  161. end
  162.